﻿var zombies = zombies || {};

zombies.ListPublisher = function () {
    var self = this;
    self.Publishers = ko.observableArray();
    self.SearchString = ko.observable("");
    self.CurrentPage = ko.observable(1);
    self.IsPrevious = ko.observable(false);
    self.IsNext = ko.observable(false);
    self.Loaded = ko.observable(false);

    self.SendMsg = function () {
        self.CurrentPage(1);
        load(self.CurrentPage(), self.SearchString());
        $.replaceUrl(self.CurrentPage(), self.SearchString());
    };

    self.EnterSendMsg = function (data, event) {
        try {
            if (event.which === 13) {
                self.CurrentPage(1);
                load(self.CurrentPage(), self.SearchString());
                $.replaceUrl(self.CurrentPage(), self.SearchString());
                return false;
            }
            return true;
        }
        catch (e)
        { }
    };

    self.PubId = ko.observable();
    self.UserName = ko.observable();
    self.Email = ko.observable();
    self.CompanyName = ko.observable();
    self.CompanyDes = ko.observable();
    self.AvailableDate = ko.observable();
    self.ExpriedDate = ko.observable();
    self.AvailableDateDisplay = ko.observable();
    self.ExpriedDateDisplay = ko.observable();

    self.PackagePub = ko.observable(0);

    self.doView = function (item) {
        self.PubId(item.PubId);
        self.UserName(item.UserName);
        self.Email(item.Email);
        self.CompanyName(item.CompanyName);
        self.AvailableDate(item.AvailableDate);
        self.ExpriedDate(item.ExpriedDate);
        self.AvailableDateDisplay(item.AvailableDateDisplay);
        self.ExpriedDateDisplay(item.ExpriedDateDisplay);
        CKEDITOR.instances['val_companydes'].setData(item.CompanyDes);
        self.PackagePub(0);
    };

    self.doEdit = function (formElement) {
        var publisher = ko.utils.arrayFirst(self.Publishers(), function (item) {
            return item.PubId === self.PubId();
        });

        var dataToEdit = {
            PubId: self.PubId,
            UserName: self.UserName,
            Email: self.Email,
            CompanyName: self.CompanyName,
            AvailableDate: self.AvailableDate,
            ExpriedDate: self.ExpriedDate,
            CompanyDes: CKEDITOR.instances['val_companydes'].getData()
        };

        if ($(formElement).valid()) {
            $.ajax({
                type: "POST",
                url: "/api/AdminPublisher/EditPublisher",
                data: ko.toJSON({ pub: dataToEdit, packagePub: self.PackagePub }), //Convert the Observable Data into JSON
                contentType: "application/json",
                dataType: 'json'
            }).done(function () {
                var addtime = moment.duration(0, 'd');
                switch (self.PackagePub()) {
                    case '1': addtime = moment.duration(1, 'M'); break;
                    case '2': addtime = moment.duration(3, 'M'); break;
                    case '3': addtime = moment.duration(1, 'y'); break;
                    default: break;
                }
                var a = moment(self.ExpriedDate());
                if (moment().isAfter(a)) {
                    a = moment();
                }
                a.add(addtime);
                self.ExpriedDate(a);

                self.Publishers.replace(publisher, {
                    PubId: self.PubId(),
                    UserName: self.UserName(),
                    Email: self.Email(),
                    CompanyName: self.CompanyName(),
                    AvailableDate: self.AvailableDate(),
                    ExpriedDate: self.ExpriedDate(),
                    AvailableDateDisplay: moment(self.AvailableDate()).format('LLL'),
                    ExpriedDateDisplay: moment(self.ExpriedDate()).format('LLL'),
                    CompanyDes: CKEDITOR.instances['val_companydes'].getData()
                });

                $('#editpub-div').removeClass('active in');
                $('#listpub-div').addClass('active in');
                toastr.success('Cập Nhật Thông Tin Tài Khoản Người Đăng QC Thành Công!');
            }).fail(function (request) {
                var msg = request.responseText.substring(12);
                msg = msg.substring(0, msg.length - 2);
                toastr.error(msg);
            });
        }
    };

    self.doDelete = function (item) {
        $.confirm({
            text: "Bạn Có Chắc Chắn Muốn Xóa Tài Khoản Người Đăng QC <strong style='color: red'>" + item.UserName + " </strong> Không?</br>Thao Tác Này Không Thể Khôi Phục.",
            title: "<strong>Xác Nhận Xóa Tài Khoản</strong>",
            confirm: function (button) {
                $.ajax({
                    type: "DELETE",
                    url: "/api/AdminPublisher/DeletePublisher/" + item.PubId,
                    success: function (data) {
                        self.Publishers.remove(item);
                        if (self.CurrentPage() > 1 && self.Publishers().length == 0) {
                            self.doPrevious();
                        }
                        toastr.success("Xóa Tài Khoản Người Đăng QC Thành Công!");
                    },
                    error: function (error) {
                        toastr.error("Xóa Tài Khoản Người Đăng QC Thất Bại!");
                    }
                });
            },
            confirmButton: "Xác Nhận Xóa",
            cancelButton: "Thoát"
        });
    };

    self.doNext = function () {
        if (self.IsNext()) {
            var page = self.CurrentPage();
            page++;
            self.CurrentPage(page);
            load(page, self.SearchString);
            if (page == 1) {
                self.IsPrevious(false)
            } else {
                self.IsPrevious(true);
            }
            $.replaceUrl(page, self.SearchString());
            App.scrollTo($('#listpub_div'), -50);
        }
    }

    self.doPrevious = function () {
        if (self.IsPrevious()) {
            var page = self.CurrentPage() - 1;
            self.CurrentPage(page);
            load(page, self.SearchString);
            if (page == 1) {
                self.IsPrevious(false)
            } else {
                self.IsPrevious(true);
            }
            $.replaceUrl(page, self.SearchString());
            App.scrollTo($('#listpub_div'), -50);
        }
    }
}

var load = function (id, searchString) {
    viewModel.Loaded(false);
    viewModel.Publishers.removeAll();

    $.ajax({
        url: '/api/AdminPublisher/GetPublishers/' + id,
        type: 'GET',
        data: { value: searchString },
        contentType: "application/json; charset=utf-8",
        dataType: "json"
    }).done(function (items) {
        if (items.length === 11) {
            items.pop();
            viewModel.IsNext(true);
        } else {
            viewModel.IsNext(false);
        }
        $.each(items, function (idx, item) {
            viewModel.Publishers.push(new zombies.Publisher(item));
        });
        viewModel.Loaded(true);
    }).error(function () {
        toastr.error('error');
    })
};

var pageUrl = $.getUrlVars("page");
var searchStringUrl = $.getUrlVars("searchString");
var viewModel;
$(document).ready(function () {
    viewModel = new zombies.ListPublisher();
    ko.applyBindings(viewModel, document.getElementById("admin_content"));

    if (typeof pageUrl === 'undefined' || !isFinite(String(pageUrl))) {
        viewModel.CurrentPage(1);
    } else {
        viewModel.CurrentPage(pageUrl);
    }
    if (typeof searchStringUrl === 'undefined') {
        viewModel.SearchString("");
    } else {
        viewModel.SearchString(searchStringUrl);
    }
    
    if (pageUrl > 1) viewModel.IsPrevious(true);
    load(viewModel.CurrentPage(), viewModel.SearchString());
});